#ifndef AVALON_DATASHUTTLEFACTORY_HPP
#define AVALON_DATASHUTTLEFACTORY_HPP
#include "Avalon/Serialization/Serialization.hpp"

namespace Avalon {
namespace Serialization {

  /*! \class DataShuttleFactory
   *  \brief Interface for creating a Serializer and its inverse Deserializer.
   *  \author Kamal Mansouri <kranar@hotmail.com>
   */
  class DataShuttleFactory {
    public:

      virtual ~DataShuttleFactory();

      //! Creates a Serializer.
      /*!
        \return A Serializer.
      */
      virtual Serializer* CreateSerializer() = 0;

      //! Creates a Deserializer.
      /*!
        \return A Deserializer.
      */
      virtual Deserializer* CreateDeserializer() = 0;
  };
}
}

#endif // AVALON_DATASHUTTLEFACTORY_HPP
